package com.gyhy.dumplings.order.controller;

import com.gyhy.dumplings.common.exception.BizCodeEnum;
import com.gyhy.dumplings.common.utils.R;
import com.gyhy.dumplings.common.vo.MemberResponseVo;
import com.gyhy.dumplings.order.interceptor.JWTInterceptor;
import com.gyhy.dumplings.order.service.OrderService;
import com.gyhy.dumplings.order.vo.OrderVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @description:
 * @author: 光影灰翼
 * @date: 2022-10-08 10:18
 * @version: 1.0
 * @email: 978330688@qq.com
 */
// @Controller
@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private OrderService orderService;

    @PostMapping("/postOrderInfo")
    R postOrderInfo(@RequestBody OrderVo orderVo) throws Exception{
        // 1、使用拦截器获取用户信息
        MemberResponseVo memberResponseVo = JWTInterceptor.toThreadLocal.get();
        System.out.println(memberResponseVo);
        Long u_id=memberResponseVo.getUId();
        // 2、获取前端传来的信息
        System.out.println(orderVo);
        // 3、调用service服务将数据存入数据库
        String res = orderService.generateOrder(u_id,orderVo);
        System.out.println(res);
        /*
            3、将数据存入数据库（事务+completableFuture+feign）
                3.1、首先计算仓库是否有足够的存量（feign）
                    3.2.1、如果存量不足则直接跳转到第4步，并返回仓储不足消息
                3.2、新建一个order，将信息设为待支付，获取orderId
                3.3、修改仓储数量，并将orderDetail存入数据库中
                3.4、待所有orderDetail存入数据库后，计算总价并填入order中
            4、返回信息
        */

        if (!res.contains("failed")) {
            return R.ok().setData(res);
        }else if(res.substring(7).equals(String.valueOf(BizCodeEnum.NO_STOCK_EXCEPTION.getCode()))){
            return R.error(BizCodeEnum.NO_STOCK_EXCEPTION.getCode(),BizCodeEnum.NO_STOCK_EXCEPTION.getMessage());
        }else if(res.substring(7).equals(String.valueOf(BizCodeEnum.STOCK_UPDATE_EXCEPTION.getCode()))){
            return R.error(BizCodeEnum.STOCK_UPDATE_EXCEPTION.getCode(),BizCodeEnum.STOCK_UPDATE_EXCEPTION.getMessage());
        }else{
            return R.error(BizCodeEnum.ORDER_CREATE_EXCEPTION.getCode(),BizCodeEnum.ORDER_CREATE_EXCEPTION.getMessage());
        }

    }
}
